package com.zzyk.main.service;


import com.zzyk.main.configuration.exception.DeviceException;
import com.zzyk.main.model.pojo.*;
import com.zzyk.main.model.vo.*;

import java.io.IOException;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public interface DeviceService {


    int deleteByPrimaryKey(Integer id);

    int insert(Device record);

    int insertSelective(Device record);

    Device selectByPrimaryKey(Integer id);

    int updateByPrimaryKeySelective(Device record);

    int updateByPrimaryKey(Device record);

    Device selectProductionDeviceByClientId(String number);

    Device selectVwDeviceProduceById(Integer id);

    /**
     * 查询全部设备信息
     *
     * @param param      模糊匹配 参数
     * @param type       1为查询生产设备 0为采集设备
     * @param areaArr
     * @param deviceList
     * @return
     */
    List<Device> selectAllByParam(String param, Integer type, Integer enterpriseID, String[] areaArr, Integer[] deviceList,Integer bind);

    /**
     * 统计设备数量
     *
     * @param type  1为查询生产设备 0为采集设备
     * @param id    公司id 为空不添加此条件
     * @param areas
     * @param group
     * @return
     */
    List<CommonCount> getTotal(Integer type, Integer id, String[] areas, Integer[] group);

    /**
     * 获取各个状态下的设备数量和数据
     *
     * @param id         企业ID
     * @param areaArr
     * @param deviceList
     * @return
     */
    HashMap<String, List<Device>> getDeviceByStatus(Integer id, String[] areaArr, Integer[] deviceList);

    /**
     * 根据设备编号去查询设备信息
     *
     * @param number 设备编号
     * @param type   1为查询生产设备 0为采集设备
     * @return
     */
    Device selectDeviceByNumber(String number, int type);

    /**
     * 根据设备ID去查询设备信息
     *
     * @param id   ID
     * @param type 类型 1为查询生产设备 0为采集设备
     * @return
     */
    Device selectDeviceById(Integer id, Integer type);

    /**
     * 添加新的设备
     *
     * @param device
     */
    void addProductionEquipment(Device device) throws IOException;

    /**
     * 根据ID删除设备信息
     *
     * @param id 设备ID
     */
    void deleteDeviceById(Integer id) throws DeviceException;

    /**
     * 修改采集设备信息
     *
     * @param device
     * @throws DeviceException
     */
    void updateByPrimaryKeySelective2(Device device);

    /**
     * 修改设备信息并进行文件上传
     *
     * @param device
     */
    void updateByPrimaryKeySelectiveAndFileUpload(Device device) throws IOException;

    /**
     * 默认加载一个设备数据
     *
     * @return
     */
    Device getProduceDefaultDevice(String[] area, Integer[] deviceList);

    /**
     * 根据企业ID查询企业下所有的采集设备
     *
     * @param company
     * @param id
     * @return
     */
    List<Device> selectDeviceByCompany(Integer company, Integer id);

    /**
     * 根据企业ID查询企业下所有的未绑定采集设备
     *
     * @param company
     * @return
     */
    List<Device> selectDeviceByCompanyTwo(Integer company);

    /**
     * 根据设备ID去查询关联的采集设备，根据采集设备去查询实时数据
     *
     * @param id
     * @return
     */
    DeviceExtraData findElectricityAnalysisData(Integer id);

    /**
     * 根据设备ID去查询今天设备用电量
     *
     * @param id
     * @return
     */
    List<DateAndString> findTodayElectricity(Integer id);

    /**
     * 根据设备ID去查询设备实时功率
     *
     * @param id
     * @return
     */
    List<DateAndString> findRealPower(Integer id);

    /**
     * 获取本月生产时长
     *
     * @param id
     * @param beginTime
     * @param endTime
     * @param type
     * @return
     */
    List<DateAndString> findProductionTime(Integer id, String beginTime, String endTime, Integer type);


    /**
     * 根据条件查询设备用电量
     *
     * @param id
     * @param beginTime 开始时间，不传为上月
     * @param endTime   结束时间，不传默认为今天
     * @return
     */
    List<DateAndString> findTodayElectricityByParam(Integer id, String beginTime, String endTime);

    /**
     * 根据条件查询设备功率
     *
     * @param id
     * @param beginTime
     * @param endTime
     * @param type      2 昨天 3 近七天
     * @return
     */
    List<DateAndString> findRealPowerParam(Integer id, String beginTime, String endTime, Integer type);

    /**
     * 加载用电分析更多图表需要数据
     *
     * @param id
     * @param beginTime
     * @param endTime
     * @return
     */
    List<DeviceExtraData> findElectricityAnalysisDataByParam(Integer id, String beginTime, String endTime);

    /**
     * 根据设备ID查询用电统计
     *
     * @param id
     * @return
     */
    PowerConsumptionStatistics findPowerConsumptionStatistics(Integer id);

    /**
     * 获取GIS页弹窗设备信息
     *
     * @param id
     * @return
     */
    DeviceData findGISDeviceInfo(Integer id);

    /**
     * 设备名模糊查询
     *
     * @param param
     * @param areaArr
     * @param deviceList
     * @return
     */
    List<Device> findDeviceLikeParam(String param, String[] areaArr, Integer[] deviceList);

    /**
     * 根据企业ID去查询生产设备信息
     *
     * @param id
     * @param deviceList
     * @return
     */
    List<Device> findDeviceByEId(Integer id, Integer[] deviceList);


    List<DeviceNode> getDeviceByEnterpriseId(String[] enterpriseIds, String param, Integer[] deviceList);


    /**
     * 获取企业微云设备列表数据
     *
     * @param enterpriseID
     * @param param
     * @param num
     * @param sortParam
     * @param pageIndex
     * @param pageSize
     * @param deviceType
     * @param deviceList
     * @return
     */
    Message getDeviceListData(Integer enterpriseID, String param, Integer num, String sortParam, Integer pageIndex, Integer pageSize, Integer deviceType, Integer[] deviceList);

    /**
     * 小程序获取设备列表
     *
     * @param enterprise
     * @param param
     * @param deviceList
     * @return
     */
    List<DeviceRealData> apiGetDeviceListDataTo(Integer enterprise, String param, Integer[] deviceList);

    /**
     * 获取登录账号所辖企业下所有设备的今日用电量
     *
     * @param enterprise
     * @param deviceList
     * @return
     */
    List<DateAndString> findToDayPower(Integer enterprise, Integer[] deviceList);

    List<MaintenanceView> getMaintenanceList(String[] ids, Integer expire, Integer[] deviceList);

    /**
     * 获取登录账号所辖企业下所有设备的七日平均使用率
     *
     * @param enterprise
     * @param deviceList
     * @return
     */
    List<Map<String, Object>> findUsageRate(Integer enterprise, Integer[] deviceList);

    /**
     * 获取登录账号所辖企业下所有设备的 使用率
     *
     * @param enterprise
     * @param deviceType
     * @param deviceList
     * @return
     */
    List<KeyValueTwo> findUsageRateTwo(Integer enterprise, String datetime, String deviceName, Integer deviceType, Integer[] deviceList);

    /**
     * 获取登录账号所辖企业下所有设备的功率总和
     *
     * @param enterprise
     * @return
     */
    List<DateAndString> findEnterprisePower(Integer enterprise);

    /**
     * 获取登录账号所辖企业下所有设备实时数据
     *
     * @param enterprise
     * @param deviceList
     * @return
     */
    List<DeviceExtraData> findEnterpriseExtraData(Integer enterprise, Integer[] deviceList);

    /**
     * 获取企业用电分析下的健康指数评分
     *
     * @param enterprise
     * @return
     */
    String findEnterpriseHealth(Integer enterprise);

    /**
     * 获取企业所辖所有设备的原始数据
     *
     * @param enterprise
     * @param deviceList
     * @return
     */
    List<DeviceOriginData> findEnterpriseDeviceOriginData(Integer enterprise, Integer[] deviceList);

    /**
     * 获取企业当天生产时长
     *
     * @param enterprise
     * @param deviceList
     * @return
     */
    String findToDayProductionTime(Integer enterprise, Integer[] deviceList);

    /**
     * 获取企业生产时长数据 本周 上周 本月  上月
     *
     * @param enterprise
     * @return
     */
    EnterpriseProductionTime findMoreProductionTime(Integer enterprise, Integer[] deviceList);

    /**
     * 获取企业所辖设备的有功和额定功率
     *
     * @param enterprise
     * @return
     */
    List<KeyValue> findEnterprisePowerData(Integer enterprise);

    /**
     * 获取用电统计下所需数据
     *
     * @param enterprise 企业ID
     * @param deviceList
     * @return
     */
    CommonTimePojo findElectricityStatistics(Integer enterprise, Integer[] deviceList);

    /**
     * 报告管理下用电质量参数考核分析
     *
     * @param enterprise
     * @param month
     * @param deviceList
     * @return
     */
    List<DeviceExtraData> findElectricityParameters(Integer enterprise, String month, Integer[] deviceList);

    /**
     * 根据采集设备ID获取生产设备信息
     *
     * @param group
     * @return
     */
    Device selectdeviceByGroup(Integer group);

    /**
     * 根据clientId去查询采集设备
     *
     * @param clientID
     * @return
     */
    Device selectByClientId(String clientID);

    /**
     * 根据设备ID获取设备当日生产时长
     *
     * @param deviceId
     * @return
     */
    String findTodayProductionTime(Integer deviceId);


    /**
     * 获取各个状态的设备总数+参数
     *
     * @param enterprise
     * @param param
     * @param deviceType
     * @param deviceList
     * @return
     */
    List<KeyValue> findDeviceStatusByParam(Integer enterprise, String param, Integer deviceType, Integer[] deviceList);


    /**
     * 获取报告管理下的结论
     *
     * @param enterprise
     * @param month
     * @param deviceList
     * @return
     */
    Map<String, Object> findReportConclusion(Integer enterprise, String month, Integer[] deviceList);

    /**
     * 获取所有采集设备数据
     *
     * @param param
     * @param areaArr
     * @param deviceList
     * @param bind
     * @return
     */
    List<Device> selectCollectionEquipment(String param, String[] areaArr, Integer[] deviceList, Integer bind,Integer status,Integer company);

    /**
     * 根据条件获取生产时长
     *
     * @param enterprise
     * @param time       时间范围
     * @return
     */
    List<KeyValue> findProductionTimeHistogram(Integer enterprise, String time, Integer[] deviceList);

    /**
     * 根据设备类型查询设备列表
     *
     * @param deviceType
     * @param areaArr
     * @param deviceList
     * @return
     */
    List<Device> selectDeviceByDeviceType(Integer deviceType, String[] areaArr, Integer[] deviceList);

    List<KeyValue> getTheEnergyYouUseToday(Integer enterprise, Integer[] deviceList);

    /**
     * 解绑设备
     *
     * @param id
     * @return
     */
    boolean unbindDevice(Integer id);

    /**
     * 根据设备编号和设备类型获取设备信息
     *
     * @param sn
     * @param type
     * @return
     */
    Device findDeviceBySnAndType(String sn, Integer type);


    List<CommonKeyValue> getAvgProductionTime(String dateTime, Integer enterprise, Integer[] deviceList);

    List<ProductionDetails> getProductionDetails(String dateTime, Integer enterprise, Integer[] deviceList);

    List<Map<String, Object>> countDeviceType(Integer enterprise, Integer[] deviceList);

    List<Map<String, Object>> getMorePowerConsumption(String startTime, String endTime, Integer enterprise, Integer[] deviceList);

    List<Map<String, Object>> getMorePowerConsumptionYear(String year, Integer enterprise, Integer[] deviceList);

    DeviceElectricityDay getMorePowerConsumptionDay(String day, Integer enterprise, Integer[] deviceList);

    List<Map<String, Object>> getEnergyUsedByDay(String day, Integer enterprise, Integer[] deviceList);

    List<MaintenanceView> getExtensionMaintenanceInfo(String[] ids, Integer expire, Integer[] deviceList);
}










